#1. 内置的open函数打开文件有几种模式，它们的区别是什么？
# 7种模式，且还可以进行组合
# r   缺省模式，只读打开，文件不存在会抛异常
# w   只写打开，文件存在，则清空文件，不存在则创建文件
# x   创建并写入一个新文件，文件存在抛出异常，不存在则创建文件，只写打开
# a   只写打开，追加内容，文件不存在，创建后只写打开，追加
# b   二进制模式，与字符编码无关
# t   缺省模式，文本模式，与字符编码相关
# +   读或写打开后，使用+来增加确实的写或读的能力，一种不能单独使用的模式，用来对rwax做增强
#2. 使用base64解码“bWFnZWR1LmNvbQ==”，使用base64编码”[magedu.com](http://magedu.com)”，分别给出它们的解码和编码结果。
import base64


enco = "bWFnZWR1LmNvbQ=="
deco = base64.b64decode(enco).decode('utf8')
print(deco)

deco2 = base64.b64encode("[magedu.com](http://magedu.com)".encode('utf-8'))
print(deco2)

#3. 列出本周讲的几种序列化方法，它们各自的特点是什么?
#pickle
#支持Python程序之间序列化和反序列化，跨平台、语言、苦啊协议不适合
#JSON
#采用完全独立于编程语言的文本格式来存储和表示数据。
#数据类型简单，本质上就是文本，公共协议，应用广泛
#MessagePack
#基于二进制高效对象序列化类库
#可以像JSON那样，在许多种语言之间交换结构对象。
#比JSON更快速也更轻巧。空间节约比较多

#4.写一个Python脚本实现找到/tmp目录及其子目录下的以.htm结尾的文件，把其后缀名改为.html
from pathlib import Path
import re,os
dstdir = Path('d:/tmp')
srcfilelist = list(map(str,dstdir.rglob('*.htm')))
regex = re.compile('(.*\.)htm')
for srcfname in srcfilelist:
    result = regex.match(srcfname)
    dstfname = "{}html".format(result.group(1))
    os.rename(srcfname,dstfname)
resltfilelist = list(map(str,dstdir.rglob('*.html')))
print(resltfilelist)

